package com.highly.thread.t2;

/**
 * Java语言提供了一种稍弱的同步机制，即volatile变量，用来确保将变量的更新操作通知到其他线程。
 * 当把变量声明为volatile类型后，编译器与运行时都会注意到这个变量是共享的，因此不会将该变量上的操作与其他内存操作一起重排序。
 * volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方，因此在读取volatile类型的变量时总会返回最新写入的值。
 */
class ThreadDemo extends Thread {
    public  volatile boolean flag = true;

    @Override
    public void run() {
        System.out.println("线程开始...");
        while (flag) {

        }
        System.out.println("线程結束...");
    }
    public void setRuning(boolean flag){
        this.flag=flag;
    }
}

public class Volatile08 {
    public static void main(String[] args) throws InterruptedException {
        ThreadDemo threadDemo004 = new ThreadDemo();
        threadDemo004.start();
        Thread.sleep(3000);
        threadDemo004.setRuning(false);
        System.out.println("flag已經改為false");
        Thread.sleep(1000);
        System.out.println("flag:"+threadDemo004.flag);
    }
}
